package com.snack.shop.task;

import com.snack.shop.service.FileManageService;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;
import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.stereotype.Component;

/**
 * 文件清理定时任务
 * 
 * 在 application.yml 中配置启用：
 * file:
 *   clean:
 *     enabled: true
 *     temporary-days: 7     # 临时文件保留天数
 *     deleted-days: 30      # 已删除文件保留天数
 */
@Component
@ConditionalOnProperty(prefix = "file.clean", name = "enabled", havingValue = "true", matchIfMissing = false)
@RequiredArgsConstructor
@Slf4j
public class FileCleanTask {

    private final FileManageService fileManageService;

    /**
     * 每天凌晨2点清理临时文件（超过7天未确认的）
     */
    @Scheduled(cron = "0 0 2 * * ?")
    public void cleanTemporaryFiles() {
        log.info("开始执行临时文件清理任务...");
        try {
            // 默认清理7天前的临时文件
            int count = fileManageService.cleanTemporaryFiles(7);
            log.info("临时文件清理完成，共删除 {} 个文件", count);
        } catch (Exception e) {
            log.error("临时文件清理失败", e);
        }
    }

    /**
     * 每周日凌晨3点清理已删除文件（超过30天的）
     */
    @Scheduled(cron = "0 0 3 ? * SUN")
    public void cleanDeletedFiles() {
        log.info("开始执行已删除文件清理任务...");
        try {
            // 默认清理30天前标记为删除的文件
            int count = fileManageService.cleanDeletedFiles(30);
            log.info("已删除文件清理完成，共删除 {} 个文件", count);
        } catch (Exception e) {
            log.error("已删除文件清理失败", e);
        }
    }
}

